<?php defined('SYSPATH') OR die('No direct access allowed.');
/**
 * Allows a template to be automatically loaded and displayed. Display can be
 * dynamically turned off in the controller methods, and the template file
 * can be overloaded.
 *
 * To use it, declare your controller to extend this class:
 * `class Your_Controller extends Template_Controller`
 *
 * $Id: template.php 3769 2008-12-15 00:48:56Z zombor $
 *
 * @package    Core
 * @author     Kohana Team
 * @copyright  (c) 2007-2008 Kohana Team
 * @license    http://kohanaphp.com/license.html
 */
abstract class Template_Controller extends Controller {
    // Template view name
    public $template = 'template';
    //
    public $use_template = TRUE;
    // Default to do auto-rendering
    public $auto_render = TRUE;

    /**
     * Template loading and setup routine.
     */
    public function __construct()
    {
        parent::__construct();

        // Load path segment
        $tsegments = array_diff(Router::$rsegments, Router::$arguments);
        if ($tsegments[count($tsegments) - 1] != Router::$method) $tsegments[] = Router::$method;
        $path = implode('/', $tsegments);

        if ($this->use_template)
        {
            // Load the template
            $this->template = new View($this->template);
            try
            {
                $headpath = 'pages/'.$path.'/head';
                $this->head = View::Factory($headpath);
            }
            catch (Exception $ex)
            {
                $this->head = "";
            }
            try
            {
                $bodypath = 'pages/'.$path.'/body';
                $this->body = View::Factory($bodypath);
            }
            catch (Exception $ex)
            {
                $this->body = "";
            }
        }
        else
        {
            $this->template = new View('pages/'.$path);
        }

        if ($this->auto_render == TRUE)
        {
            // Render the template immediately after the controller method
            Event::add('system.post_controller', array($this, '_render'));
        }
    }

    /**
     * Render the loaded template.
     */
    public function _render()
    {
        if ($this->auto_render == TRUE)
        {
            // Render the template when the class is destroyed
            $this->template->head = $this->head;
            $this->template->body = $this->body;
            $this->template->title = isset($this->title) ? $this->title : "";
            $this->template->render(TRUE);
        }
    }

} // End Template_Controller